Deprecate and ignore gtk-entry-password-hint-timeout
authorWilliam Jon McCann <william.jon.mccann@gmail.com>
Wed, 10 Jul 2013 16:13:12 +0000 (12:13 -0400)
committerWilliam Jon McCann <william.jon.mccann@gmail.com>
Thu, 11 Jul 2013 21:08:15 +0000 (17:08 -0400)
This feature offers a number of benefits related to providing
feedback to the user when the password is masked. Some experts have
argued that password masking is harmful. I tend to agree with this
setting providing a better and more moderate solution. Some agree:
https://www.schneier.com/blog/archives/2009/07/the_pros_and_co.html

In order to further lessen the impact I've only enabled the feature
on the primary display since the likelyhood of a non-primary display
being visible by others is higher.

gtk/gtkentry.c
gtk/gtksettings.c

index 581a7b3287a6395b43e519fe70b21b877e34b2af..1b7cf0fa5fdc200651ed53dc74b5c84621981304 100644 (file)
 #define MIN_ENTRY_WIDTH  150
 #define DRAW_TIMEOUT     20
 #define PASSWORD_HINT_MAX 8
+#define PASSWORD_HINT_TIMEOUT 600
 
 #define MAX_ICONS 2
 
@@ -5136,7 +5137,6 @@ buffer_inserted_text (GtkEntryBuffer *buffer,
                       GtkEntry       *entry)
 {
   GtkEntryPrivate *priv = entry->priv;
-  guint password_hint_timeout;
   guint current_pos;
   gint selection_bound;
 
@@ -5153,11 +5153,18 @@ buffer_inserted_text (GtkEntryBuffer *buffer,
   /* Calculate the password hint if it needs to be displayed. */
   if (n_chars == 1 && !priv->visible)
     {
-      g_object_get (gtk_widget_get_settings (GTK_WIDGET (entry)),
-                    "gtk-entry-password-hint-timeout", &password_hint_timeout,
-                    NULL);
+      GdkScreen *screen;
+      gint primary_num;
+      gint monitor_num;
+
+      screen = gtk_widget_get_screen (GTK_WIDGET (entry));
+      primary_num = gdk_screen_get_primary_monitor (screen);
+      monitor_num = gdk_screen_get_monitor_at_window (screen, priv->text_area);
 
-      if (password_hint_timeout > 0)
+      /* Only show password hint on the primary monitor to help avoid
+         showing passwords on presentations and the like. Would be
+         better if we had an explicit presentation mode. */
+      if (primary_num == monitor_num)
         {
           GtkEntryPasswordHint *password_hint = g_object_get_qdata (G_OBJECT (entry),
                                                                     quark_password_hint);
@@ -5171,7 +5178,7 @@ buffer_inserted_text (GtkEntryBuffer *buffer,
           password_hint->position = position;
           if (password_hint->source_id)
             g_source_remove (password_hint->source_id);
-          password_hint->source_id = gdk_threads_add_timeout (password_hint_timeout,
+          password_hint->source_id = gdk_threads_add_timeout (PASSWORD_HINT_TIMEOUT,
                                                               (GSourceFunc)gtk_entry_remove_password_hint, entry);
         }
     }
index fadb39540b3082e2fa27685b15034e32ec2ad880..3c31c45425e00d011fe25949685bcb437ecca452 100644 (file)
@@ -1336,14 +1336,16 @@ gtk_settings_class_init (GtkSettingsClass *class)
    * last char. 600 is a good value for enabling it.
    *
    * Since: 2.10
+   *
+   * Deprecated: 3.10: This setting is ignored
    */
   result = settings_install_property_parser (class,
                                              g_param_spec_uint ("gtk-entry-password-hint-timeout",
                                                                 P_("Password Hint Timeout"),
                                                                 P_("How long to show the last input character in hidden entries"),
                                                                 0, G_MAXUINT,
-                                                                0,
-                                                                GTK_PARAM_READWRITE),
+                                                                600,
+                                                                GTK_PARAM_READWRITE | G_PARAM_DEPRECATED),
                                              NULL);
   g_assert (result == PROP_ENTRY_PASSWORD_HINT_TIMEOUT);